home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac: Not for Sale / Another.not.for.sale (Australia).iso / fade into you / being there / Issues & Ideas / VMRL / Proposals / AutoDesk CyberSpace / CyberSpace DF
Text File  |  1994-10-01  |  49KB  |  1,127 lines

  1.  
  2.    Cyberspace Description Format (CDF)
  3.    
  4.    Reference Specification Proposal for VRML
  5.    
  6.    Introduction and Scope.
  7.    
  8.    1.1. This document details a proposed standard text format for
  9.    describing cyberspace decks and virtual worlds. It is based on
  10.    Autodesk's internal experience using the Cyberspace Developer Kit CDF.
  11.    As a result, this proposal contains some changes from the CDF found in
  12.    CDK Versions 1.0 and 1.01. The specification reflects a change in
  13.    focus from supporting the CDF as a proprietary developer's tool to
  14.    promoting the CDF as a set of guidelines that will evolve towards an
  15.    industry standard.
  16.    
  17.    1.2. The purpose of the CDF is to provide a standard framework to
  18.    store, retrieve, modify and exchange descriptions of cyberspace
  19.    objects. These descriptions encompass object initialization, object
  20.    state and object scheduling within a cyberspace simulation.
  21.    
  22.    1.3. We start with a small core containing basic syntax,
  23.    organizational and reference semantics. The next layer (level 2)
  24.    contains semantics for creating certain classes of objects fundamental
  25.    to all virtual worlds. The third layer (level 3) contains
  26.    vendor-specific or experimental extensions in such a way that those
  27.    extensions can be read or bypassed by a given CDF parser (see figure
  28.    1).
  29.    
  30.    
  31.    
  32.    [IMAGE] 
  33.    
  34.    
  35.    
  36.    Figure 1. CDF as a layered standard.
  37.    
  38.    
  39.    
  40.    1.4. The CDF as an industry standard allows any number of
  41.    implementations, just as today there are any number of implementations
  42.    of DXF readers and writers. It gains this flexibility through layering
  43.    and by allowing delegation of parsing of various resource files (such
  44.    as DXF, 3DS, Inventor, OOGL, and others). For example, a given CDF
  45.    parser may not itself know how to parse a 3DS file, but may delegate
  46.    this task to a parser object for that capability as in figure 2. The
  47.    sub-parser can either create native objects from the resource file, or
  48.    rewrite it as CDF which can then be reparsed by the CDF parser.
  49.    
  50.    [IMAGE]
  51.    
  52.    Figure 2. CDF Parser delegation.
  53.    
  54.    1.5. The CDF describes cyberspace simulations, in which changing
  55.    constellations of geometry and behavior reflect some domain of
  56.    interest, rather than merely assembling static geometrical scenes.
  57.    Autodesk has created a large number of scene description classes in
  58.    its Cyberspace Developer Kit that are expressible in CDF; however, the
  59.    specification for these classes can apply equally well to a variety of
  60.    class libraries. A proposed standard for these specifications is
  61.    included in the second layer of the CDF.
  62.    
  63.    1.6. There are a large number of possible kinds of cyberspace
  64.    behaviors. The description of these behavior types is in its infancy.
  65.    Although Autodesk has several in-house behavior description languages
  66.    that can be expressed in CDF, creating a general framework for
  67.    behavior expression and interoperability is and will continue to be an
  68.    ongoing issue. The CDF can help this effort by providing a basic
  69.    syntax in which behavior specification proposals can be expressed and
  70.    evaluated.
  71.    
  72.    1.7. This remainder of this document considers the purpose of the CDF
  73.    as a VRML candidate, a set of design goals for the CDF, and the
  74.    proposed syntax and semantics.
  75.    
  76.    CDF Design Goals
  77.    
  78.    This is a discussion of the design goals for the CDF.
  79.    
  80.    2.1. Declarative, not procedural. The CDF strives to be independent of
  81.    procedural semantics and particular language implementations, though
  82.    interpretable code fragments or executables can be embedded within CDF
  83.    extensions. A CDF file is a description of a cyberspace, or virtual
  84.    world, and not a program to create one.
  85.    
  86.    2.2. Platform-independent. CDF is simply a text format, and contains
  87.    no bias towards any particular operating system or hardware platform.
  88.    
  89.    2.3. Small and easily understandable. The CDF uses a layered strategy.
  90.    A small, easily understood set of core elements containing the basic
  91.    syntactic and semantic idioms are handled by all parsers. A second
  92.    layer, built on top of the core, contains standard specification
  93.    mechanisms to specify widely used constructs that are common to all 3D
  94.    simulations. The specification contains extension protocols to enable
  95.    the developer to experiment with additional layers on top of the first
  96.    two.
  97.    
  98.    2.4. Easy orientation within a CDF file by authors and readers.
  99.    Authors and readers of a CDF file (both persons and software agents)
  100.    can easily tell where they are in the file.
  101.    
  102.    2.5. Concise. In as much as the standard is intended as a medium of
  103.    exchange, CDF files and strings containing CDF fragments should impose
  104.    a minimum burden on storage space and bandwidth.
  105.    
  106.    2.6. Object oriented, but not to any particular programming language
  107.    model. The CDF expresses that some particular object instance of a
  108.    class or type is to be created and initialized with a particular set
  109.    of attributes, while not mandating in what language the object class
  110.    is implemented.
  111.    
  112.    
  113.    
  114.    2.7. Expressive. All file formats enable the translation of text into
  115.    some set of internal data structures within a program. These data
  116.    structures are usually hierarchical in nature. The CDF provides a
  117.    small set of "utility" built-in data structures within the format. It
  118.    also provides a means for the CDF developer community to expand on
  119.    this set on a per-project basis.
  120.    
  121.    2.8. Expandable. The CDF enables both ad-hoc and per-project
  122.    extensions, as well as a means to incorporate them into standard
  123.    extension protocols. There are two dimensions along which these
  124.    extensions can occur. First, the range of objects that can be
  125.    described can easily be extended; second, more data structures can be
  126.    added to describe values for object initialization descriptions.
  127.    
  128.    2.9. Facilitates experimentation. The spirit of the CDF is to enable
  129.    and encourage extensions to itself without violating basic
  130.    parsability.
  131.    
  132.    3. CDF Syntax.
  133.    
  134.    The CDF core syntax has three parts. The first is the reserved
  135.    character set for object description; the second is the set of data
  136.    types and structures expressible by the character set; the third is an
  137.    protocol under which the number of data types can be extended.
  138.    
  139.    The use of several mandated data structures within the syntax sets the
  140.    stage for greater compatibility between delegated parsers. Some
  141.    programs use the resulting structures for an object's runtime state.
  142.    Such a 1:1 mapping between the CDF and object state is intuitive and
  143.    also facilitates trouble-shooting.
  144.    
  145.    3.1. Character Set.
  146.    
  147.    3.1.1. A CDF file or string is composed of whitespace (spaces, tabs,
  148.    newlines and return characters), data types and any of the nine
  149.    reserved characters % , ; , ( , ) , { , } , [ , ] and " . All other
  150.    characters not part of the data type syntax are ignored by the parser,
  151.    unless they occur within the string data type. White space and
  152.    reserved characters that do not occur within the context of a double
  153.    quoted string are treated as token separators.
  154.    
  155.    3.1.2. Arithmetic and logical characters occurring singly or in
  156.    conjunction with other such symbols not part of the reserved set in
  157.    3.1.1 are reserved for their use as arithmetic and logical symbols and
  158.    shall not be used in any data type extension. They are read as strings
  159.    unless they appear with other characters inside double quotes. These
  160.    characters are ~ , ! , ^ , & , * , - , + , = , / , | , : , < and > .
  161.    
  162.    3.2. Core Data Types.
  163.    
  164.    
  165.    
  166.    3.2.1. Integers -- Integers are expressed as themselves. Unary minus
  167.    is supported. For example, 0, -42, 138 are legal. Range is signed,
  168.    32-bit base 10 by default, though other ranges and bases can be
  169.    specified by directions to the CDF reader functions. See also 4.6 on
  170.    the file mode line.
  171.    
  172.    3.2.2. Reals -- Real numbers are expressed as themselves. Unary minus
  173.    is supported. Numbers between -1 and 1 (exclusive) have a leading zero
  174.    to the left of the decimal point. For example, 0.12394729, -45.67,
  175.    78.9 are legal. Range is signed IEEE double precision. All reals are
  176.    in base 10. If a real number is called for in an extended data type
  177.    specification and an integer is offered, the integer is cast to a
  178.    real. (While the number 3 is a real number, it is parsed as an
  179.    integer.)
  180.    
  181.    3.2.3. Strings -- Strings are expressed as follows.
  182.    
  183.    3.2.3.1. Any sequence of characters between a double quote and the
  184.    next double quote is read as a string.
  185.    
  186.    3.2.3.2. Any non-double-quoted sequence of characters that does not
  187.    contain whitespace or reserved characters and is not a number is read
  188.    as a string.
  189.    
  190.    3.2.3.3. All strings are case sensitive.
  191.    
  192.    3.2.4. Tuples -- A tuple is delimited by parentheses ( ) and can
  193.    contain any number of CDF data structures and data objects, including
  194.    other tuples. All tuple elements are separated by spaces. Tuples are
  195.    used as heterogeneous lists, as in Lisp.
  196.    
  197.    3.2.5. Queues -- A queue is delimited by braces { } and can contain
  198.    any number of CDF data structures or data objects. The structures or
  199.    objects must be of the same type, e.g., all integers, all tuples, etc.
  200.    
  201.    
  202.    3.2.6. Dictionaries -- A dictionary is delimited by brackets [ ] and
  203.    can contain any number of string-queue pairs. The string acts as the
  204.    lookup key for the queue and items in the queue. Any number of items
  205.    of the same type can be stored under the same key. The queue in the
  206.    context of a dictionary is also called a value queue in this document.
  207.    Thus:
  208.    
  209.  
  210.         [ A { B } ]  -- A is a key to the value queue containing B;
  211.         the value of A is B.
  212.  
  213.         [ A { B C } ] -- A is a key to the value queue containing B;
  214.         the value of A is B and C.
  215.  
  216.         [ A { { B C } } ]  -- A is a key to the value queue
  217.         containing the queue containing B and C; the value of A is
  218.         { B C }.
  219.  
  220.    
  221.    
  222.    3.2.7.Comments -- Comments are any number of characters, reserved or
  223.    not, that are preceded by a semicolon and terminated by a newline
  224.    character. Comments are ignored (except for the mode line, see 4.6
  225.    below). In this, they are identical to Lisp style comments.
  226.    
  227.    3.3. Extended Data Types
  228.    
  229.    3.3.1 Data type syntax extension protocol -- A data structure
  230.    extension is delimited by percent signs. The first percent sign is
  231.    always followed by the name of the object type. This is followed by
  232.    tokens as needed to specify the data type. For example, in the CDF
  233.    extended data type package detailed below, % vector3 (5.8 6.2 35.78) %
  234.    might specify a 3 dimensional vector with 5.8, 6.2 and 35.78 as the
  235.    vector elements. The CDF core does not itself contain any of these
  236.    extensions, only the means for specifying them. The CDF level 2
  237.    contains an extended data type package containing some of the basic
  238.    data structures common to all 3D simulations. Vendors and developers
  239.    can add their own packages as desired. Parsers that do not know of a
  240.    particular extended data type ignore it and the object attribute of
  241.    which it is a value. For linear algebra data types, a right-handed
  242.    coordinate system is assumed.
  243.    
  244.    3.3.2. CDF Extended Data Type Package -- The CDF level 2 contains a
  245.    set of extended data types built on top of the core extension
  246.    protocol.
  247.    
  248.    3.3.2.1. Data block -- This is a block of data, which the parser
  249.    regards as unstructured. The block can be any size. The CDF
  250.    specification is:
  251.    
  252.      % data_block ( readwrite_flag printable_flag executable_flag
  253.      filename) %
  254.      
  255.    
  256.    
  257.    The readwrite_flag is one of READWRITE or READONLY. The printable_flag
  258.    is one of PRINTABLE or NON_PRINTABLE. The executable_flag is
  259.    EXECUTABLE or NON_EXECUTABLE. The filename is a filename string with
  260.    the path information delimited by forward slashes.
  261.    
  262.    3.3.2.2 3D vertex -- The CDF specification is:
  263.    
  264.      % vertex3 ( x y z ) %
  265.      
  266.    
  267.    
  268.    where x, y, and z are real numbers.
  269.    
  270.    3.3.2.3 3D vector -- The CDF specification is:
  271.    
  272.      % vector3 ( x y z ) %
  273.      
  274.    
  275.    
  276.    where x, y, and z are real numbers.
  277.    
  278.    3.3.2.4 3D matrix -- This is a PHIGS-style matrix of four columns:
  279.    U,V,N,T. An invariant fourth row of ( 0 0 0 1) is assumed, so it is
  280.    unnecessary to specify it. The matrix is therefore specifiable by
  281.    three vectors and a vertex. The CDF specification is:
  282.    
  283.      % matrix ( ux uy uz ) ( vx vy vz ) ( nx ny nz ) ( tx ty tz ) %
  284.      
  285.    
  286.    
  287.    where,
  288.    
  289.  
  290.         ux, uy and uz are real numbers in the U column vector,
  291.  
  292.         vx, vy and vz are real numbers in the V column vector,
  293.  
  294.         nx, ny and nz are real numbers in the N column vector,
  295.  
  296.         tx, ty and tz are real numbers in the T column vertex.
  297.  
  298.    
  299.    
  300.    3.3.2.5Rotation -- These are similar to quaternions (an economical way
  301.    to specify rotations) but are easier to specify. The CDF specification
  302.    is:
  303.    
  304.      % rotation theta ( x y z ) %
  305.      
  306.    
  307.    
  308.    where theta is the amount of rotation in radians and x, y and z are
  309.    the components of the vector part of the rotation (the axis of
  310.    rotation). Rotation around the axis is according to the right hand
  311.    rule.
  312.    
  313.    
  314.    
  315.    4. CDF Organization and Semantics.
  316.    
  317.    4.1. The CDF organizes the data objects and extended data types into
  318.    specifications for cyberspace objects around the section concept. A
  319.    deck or virtual world specification in CDF is composed of a number of
  320.    these sections. Each section encapsulates the specifications for a
  321.    particular class or type hierarchy. For example, there might be a
  322.    viewer section, a display section, a geometry section, a lights
  323.    section and so on. For a particular application, sections should have
  324.    unique names. Autodesk's CDK comes with its own set of sections, where
  325.    each section groups class instance specifications from a different C++
  326.    class hierarchy. Developers and other vendors can also create their
  327.    own sections for any class hierarchy or sub hierarchy, or map CDF into
  328.    another language than C++.
  329.    
  330.    4.2. A section is expressed as a dictionary, and has three entries.
  331.    
  332.    A mandatory section name string, e.g. GEOMETRY, DISPLAYS, VIEWERS,
  333.    LIGHTS, MATERIALS.
  334.    
  335.    An optional defaults dictionary, containing such things as the default
  336.    class name for objects in the hierarchy, usual initializer arguments,
  337.    and so forth.
  338.    
  339.    A mandatory specs dictionary, containing object specification
  340.    dictionaries kept under the object's name. Object specification
  341.    dictionaries are attribute values kept under the attribute name key.
  342.    
  343.    The words section, defaults, specs, class and like are reserved.
  344.    
  345.    4.3. In the example below, items have been indented for clarity. This
  346.    is not necessary; in fact indentation and newline characters are not
  347.    necessary at all.
  348.    
  349.  
  350. [ section   { mysection }
  351.   defaults  { [ attribute_name_4 { on }
  352.                 class { ThingAMaBob }
  353.                 ]
  354.               }
  355.   specs     { [ object_name_1 { [ attribute_name_1 { 4 }
  356.                                   attribute_name_2 { yes }
  357.                                   attribute_name_3 { (F5 34 no ) }
  358.                                   ]
  359.                                 }
  360.                 object_name_2 { [ attribute_name_1 { 5 }
  361.                                   attribute_name_2 { no }
  362.                                   attribute_name_3 { (F24 9 no ) }
  363.                                   attribute_name_4 { off }
  364.                                 ]
  365.                               }
  366.                 ]
  367.               }
  368. ]
  369.  
  370.    
  371.    
  372.    Figure 3. Section example.
  373.    
  374.    We could of course call the object_names and attribute_names anything
  375.    we wanted.
  376.    
  377.    Each default attribute is applied to any object description that lacks
  378.    an explicit value for that attribute. In figure 3, for the first
  379.    object object_name_1, the value of attribute_name_4 is on.
  380.    
  381.    4.4. Attributes of an object might contain direct references to its
  382.    state, or initialization information, or code fragments, or filenames
  383.    of DXF or 3DS information, or anything at all. The precise way the CDF
  384.    description of a particular object is parsed and turned into an object
  385.    is the responsibility of the developers of that object.
  386.    
  387.    4.5. Section extension protocol -- There can be an unlimited number of
  388.    different sections, so long as they have unique names. Vendor specific
  389.    section names are to be prefixed by a vendor-specific sentinel. The
  390.    form for this sentinel is several letters followed by an underscore.
  391.    Autodesk reserves the sentinels "AD_" and "CY_".
  392.    
  393.    4.6. Mode line -- The mode line contains information about how CDF is
  394.    to be read within a text file. This includes integer base information
  395.    and other directions for CDF reader. The mode line is contained on one
  396.    comment line (preceded by a semicolon). The mode line is the first
  397.    line of the file and only one mode line is allowed per file. The mode
  398.    line is prefixed by a "; -*-" (semicolon hyphen star hyphen) symbol.
  399.    After this delimiter are one or more variable : value; pairs,
  400.    separated by semicolons. For example, if we wanted to set the integer
  401.    base to 8 and the path default to "../../geom", we would use a mode
  402.    line like this:
  403.    
  404.      ; -*- base : 8 ; path_default : "../../geom" 
  405.      
  406.    
  407.    
  408.    No variable/value pairs are specified by the core CDF guidelines, only
  409.    the syntax for expressing them. We will probably wish to incorporate
  410.    some into the standard before its release.
  411.    
  412.    4.7. Specification by example -- Object specifiers can be instructed
  413.    to use the specification from another specified object within the same
  414.    section. This makes the specification of similar items much easier, in
  415.    that the author can in effect say "I want one of those with these
  416.    modifications."
  417.    
  418.  
  419. [ section   { mysection }
  420.   defaults  { [ class { ThingAMaBob }
  421.                 attribute_name_2 { no }
  422.                 attribute_name_4  { on }
  423.                 ]
  424.               }
  425.    specs    { [ objectname_1 { [ attribute_name_1 { 4 }
  426.                                  attribute_name_2 { yes }
  427.                                  attribute_name_3 { ( F5 34 no ) }
  428.                                  attribute_name_4 { off }
  429.                                  ]
  430.                                }
  431.                 objectname_2 { [ like { objectname_1 }
  432.                                  attribute_name_3 { ( F24 9 no )  }
  433.                                  ]
  434.                                }
  435.                 ]
  436.               }
  437. ]
  438.  
  439.    
  440.    
  441.    Figure 4. Specification by example.
  442.    
  443.    In the preceding example, object_name_2 has the same values for
  444.    attribute_name_1 and attribute_name_2 as does object_name_1.
  445.    Attribute_name_3's value is different. Attribute_name_4 is taken from
  446.    the "like" object, in this case object_name_1, so its value is "off".
  447.    Attribute_name_2 is also taken from the "like" object specifier,
  448.    rather than from the default.
  449.    
  450.    4.8. Referring to objects built from other sections -- It is useful to
  451.    have object specifiers in one section refer to other object specifiers
  452.    in other sections. A viewer object instance, for example, may need to
  453.    refer to one of several display object instances.
  454.    
  455.    4.8.1 These references are done by placing section and object names in
  456.    the attribute's value queue. Thus, an XXX_VIEWER section might have a
  457.    viewer_1 object specifier that refers to an object specified in the
  458.    XXX_DISPLAYS section. The viewer_1 object specifier might would look
  459.    like:
  460.    
  461.  
  462.         [ attribute_name_1 { value_1 }
  463.           display { section XXX_DISPLAYS display_name_1 }
  464.           ...
  465.         ]
  466.  
  467.    
  468.    
  469.    Figure 5. Object specifier dictionary showing a reference.
  470.    
  471.    Objects and sections that are referred to must have been described
  472.    previously in the file.
  473.    
  474.    If the parser finds that the first element of the queue is the word
  475.    "section", it retrieves the second and third elements of the queue to
  476.    find the section's name and name of the object within it. Exactly what
  477.    it does with this information is up to the implementation. Typically
  478.    an application would keep a database of the objects stored
  479.    hierarchically under their section name and CDF specifier name, so
  480.    that the objects are available to other sections.
  481.    
  482.    4.8.2. This mechanism enables building up of arbitrary hierarchies.
  483.    The following shows a possible CDF file that builds up a simple space
  484.    of a room, a chair and a table. The classes and section names are
  485.    fictional, this is just to show how cross referencing between sections
  486.    works:
  487.    
  488.  
  489. [ section   { XXX_LIGHT }
  490.   defaults  { [ class { XXXLight }
  491.                 ]
  492.               }
  493.   specs     { [ light0 { [ type { ambient }
  494.                            magnitude { 0.3 }
  495.                            ]
  496.                          }
  497.                 light1 { [ type { directed }
  498.                            magnitude { 0.65 }
  499.                            aim { %vector3 ( 1.0 1.0 -1.0 )% }
  500.                            ]
  501.                          }
  502.                 ]
  503.             }
  504. ]
  505.  
  506. [ section   { XXX_GEOMETRY }
  507.    defaults { [  file  { /net/vajra/geom }  ; your net path here
  508.                  class { XXXGeometry }
  509.                  space { section XXX_SPACE myspace }
  510.                  ]
  511.               }
  512.    specs    { [  room_geom { [ file { room.3ds } ] }
  513.                  chair_geom { [ file { chair.3ds } ] }
  514.                  table_geom { [ file { table.dxf } ] }
  515.                  ]
  516.               }
  517. ]
  518.  
  519. [ section    { XXX_ SIM_OBJECT }
  520.   defaults   { [ class { XXXSimObj }
  521.                  units { pounds feet seconds }
  522.                  ]
  523.                }
  524.   specs      { [ room  { [ geometry { section XXX_GEOMETRY room_geom }
  525.                            location { %vertex3 ( 0 0 0 )% }
  526.                            ]
  527.                          }
  528.                  chair { [ class { XXXPhysical }
  529.                            geometry { section XXX_GEOMETRY chair_geom }
  530.                            contained_by { section XXX_SIM_OBJECTS room }
  531.                            location { %vertex3 ( 5 0 5 )% }
  532.                            rotation { %rotation 0.25  ( 0 1 0 )% }
  533.                            mass { 10.0 }
  534.                            ]
  535.                          }
  536.                  table { [ like { section XXX_SIM_OBJECT chair }
  537.                            geometry { section XXX_GEOMETRY chair_geom }
  538.                            location { %vertex3  (10 0 10)% }
  539.                            mass { 50.0 }
  540.                            ]
  541.                          }
  542.                  ]
  543.           }
  544. ]
  545.  
  546. [ section   { XXX_SPACE }
  547.   defaults  { [ class { XXXSpace }
  548.                 ]
  549.               }
  550.   specs     { myspace [  schedule { ( { section XXX_SIMOBJECT room }
  551.                                       { section XXX_SIMOBJECT chair }
  552.                                       { section XXX_SIMOBJECT table }
  553.                                       { section XXX_LIGHT light0 }
  554.                                       { section XXX_LIGHT light1 }
  555.                                       )
  556.                          ]
  557.               }
  558. ]
  559.  
  560.    
  561.    
  562.    Figure 6. Simple scene description showing referencing.
  563.    
  564.    4.9. Parser Delegation -- A program's CDF parser can delegate the
  565.    parsing of non-CDF resource files to sub-parser objects, as in
  566.    paragraph 1.4 and figure 2. A sub-parser can parse the resource file
  567.    in one of several ways.
  568.    
  569.    It changes the resource into CDF and invokes the CDF reader
  570.    recursively,
  571.    
  572.    It recognizes that the resource contains CDF and invokes the reader
  573.    recursively,
  574.    
  575.    It reads, parses and converts the resource directly into one or more
  576.    native objects to be used by the virtual world. These objects are
  577.    either placed into an object database directly or held with the
  578.    sub-parser object for later retrieval by the program.
  579.    
  580.    For example, a 3DS file contains a variety of scene information such
  581.    as lights, materials, textures, polygonal meshes, and so forth. A
  582.    class, 3DS_Parser, might be a part an object created as part of an
  583.    XXX_EXTERNAL_RESOURCES section.
  584.    
  585.  
  586. {specs [ bird_resource { [ class       { 3DS_Parser }
  587.  
  588.  
  589.                         file          { bird.3ds }
  590.  
  591.  
  592.                         sentinel  { "XXX" }
  593.  
  594.  
  595.                               ] } ]
  596.  
  597.  
  598. }
  599.  
  600.    Figure 7. Description of a resource.
  601.    
  602.    Specifiers found in the file "bird.3ds" are converted to parsable CDF
  603.    structures where possible and placed in the corresponding section with
  604.    the appropriate sentinel characters, though as with references, the
  605.    resulting descriptions must be parsed and the objects created before
  606.    they can be referred to. Alternatively, the sub-parser can create the
  607.    objects and store them and other sections can refer to them using the
  608.    cross-reference mechanism described in 4.8. In our example, if you
  609.    wanted to refer to the material "beakstuff" in the resource, the
  610.    following CDF reference could be used:
  611.    
  612.    { section XXX_EXTERNAL_RESOURCES bird_resource MATERIALS beakstuff }
  613.    
  614.    CDF Parsers that understand how to parse XXX_EXTERNAL_RESOURCES will
  615.    know how to deal with the extra items in the queue.
  616.    
  617.    The ability of a CDF parser to reference components of hierarchical
  618.    structures such as geometry is dependent upon the sophistication of
  619.    the delegated-to parser of the external resource that contains that
  620.    structure. The internals of delegated parsers (beyond the storage of
  621.    their results) are not specified by this document.
  622.    
  623.    4.10 CDF Level 2 section extensions -- Level 2 contains section
  624.    description proposals for scene description. We have omitted a
  625.    MATERIALS section at this time, but have a detailed material section
  626.    proposal in preparation.
  627.    
  628.    4.10.1. Section GEOMETRY -- Geometry can either be obtained from a
  629.    file or from a CDF description of simple parameterized closed figures.
  630.    In either case, the geometrical object is called a component. Any
  631.    component may contain other components. If geometry is obtained
  632.    directly from a file, a delegated parser is used and the variable
  633.    names used are:
  634.    
  635.      path, string -- a file system path name (If not present, the section
  636.      parser looks in the current directory),
  637.      
  638.      file, string -- a filename, including a path if a default path is
  639.      not specified,
  640.      
  641.      scale, real -- a scaling factor that all vertices in the file are
  642.      multiplied by. Defaults to 1.0 if not present.
  643.      
  644.    
  645.    
  646.    4.10.1.1. If the non-CDF geometry file is parsed as an external
  647.    resource as in 4.9, the resource may contain multiple components, as
  648.    well as other information retrievable as per 4.9. In this case, the
  649.    description of the geometry would contain:
  650.    
  651.      resource, reference to resource -- a reference to a resource as in
  652.      4.9.
  653.      
  654.    
  655.    
  656.    4.10.1.2. If the file is parsed as a GEOMETRY section object, all the
  657.    geometry is placed as a hierarchy of objects under one component, and
  658.    any other information in the file (including the names of the
  659.    sub-components is not accessible. This is useful and more concise if
  660.    the file contains non-hierarchical geometry (e.g., only a simple table
  661.    or chair).
  662.  
  663.         [ section  { XXX_GEOMETRY }
  664.           defaults { [ class { XXX_Component } ] }
  665.           specs { [ chair_geom  { [ file { chair.3ds }
  666.                                     scale  { 1. 5 }
  667.                                     ] } ] } ]
  668.  
  669.    
  670.    
  671.    Figure 8. A GEOMETRY section.
  672.    
  673.    In this example, the chair_geom is found in the file chair.3ds. We
  674.    aren't interested in anything else the file has to tell us, only the
  675.    specific geometrical component of a chair. The scale factor enables us
  676.    to uniformly resize the component; in this case the component will be
  677.    a uniform 1.5 times the size it is specified as in the 3DS file. If,
  678.    instead of a simple chair, the file contained several pieces of
  679.    geometry, say, a footstool, a chair and a TV tray, they would all be
  680.    created as a single hierarchically arranged component under
  681.    "chair_geom". While a program familiar with the specific XXX_Component
  682.    object could walk the geometry tree and retrieve the footstool, the
  683.    footstool could not be referred to by any other CDF specification. If
  684.    this capability is needed, see 4.10.2. The XXX_Component acts much
  685.    like a delegated parser (in fact, it may invoke one), but throws away
  686.    non-geometrical information.
  687.    
  688.    4.10.1.3. A CDF spec for a simulation object in the virtual world that
  689.    contains geometry refers to the Component (as in 4.8.2 or 4.9).
  690.    
  691.    4.10.1.4. Parameterized closed figures that can be described in this
  692.    section include box, cone, pyramid, cylinder, sphere, dome, nose,
  693.    reducer, torus, and solid figures of extrusion and revolution. If the
  694.    figures are supported as solids by the implementation, there is also a
  695.    solid figure described by boolean operations on other solid figures.
  696.    
  697.    4.10.1.5. Box -- A rectilinear parallelepiped. There are three ways of
  698.    describing a box:
  699.    
  700.                 Anchored at the origin, extending along each positive
  701.                 axis,
  702.                 
  703.                       d, real -- dimension of cube.
  704.                       
  705.                 Anchored at origin, extending along each positive axis,
  706.                 
  707.                       xdim, real -- dimension along X axis,
  708.                       ydim, real -- dimension along Y axis,
  709.                       zdim, real -- dimension along Z axis.
  710.                       
  711.                 User specifiable anchor, and orientation,
  712.                 
  713.                       v1, vertex3 -- a corner of the box,
  714.                       v2, vertex3 -- opposite corner of the box from v1.
  715.                       
  716.    
  717.    
  718.    4.10.1.6. Cone -- A right circular cone, with option to truncate.
  719.    There are two ways of describing a cone:
  720.    
  721.                 Base centered at the origin,
  722.                 
  723.                       r_bottom, real -- radius of the bottom,
  724.                       r_top, real -- radius of the top,
  725.                       h, real -- height of the cone,
  726.                       tes, integer -- number of tesselations around the
  727.                       surface of the cone.
  728.                       
  729.                 User specifiable axis,
  730.                 
  731.                       v1, vertex3 -- wider end of axis of cone,
  732.                       v2, vertex3 -- narrower end of axis of cone,
  733.                       r_bottom, real -- radius of the wider end,
  734.                       r_top, real -- radius of the narrower end,
  735.                       tes, integer -- number of tesselations around the
  736.                       surface of cone.
  737.                       
  738.    
  739.    
  740.    4.10.1.7. Dome -- A portion of a sphere, sometimes called a spherical
  741.    sector of one base. There are two ways of describing a dome:
  742.    
  743.                 Center of radius at the origin,
  744.                 
  745.                       rad, real -- radius of the dome,
  746.                       tes, real -- number of tesselations around the
  747.                       surface of the dome,
  748.                       h, real -- distance from the top of the sphere to
  749.                       cut off the dome.
  750.                       
  751.                 User specifiable axis,
  752.                 
  753.                       v1, vertex3 -- center of the top of the dome,
  754.                       v2, vertex3 -- center of the bottom of the dome,
  755.                       
  756.                       
  757.                       rad, real -- radius of the dome, from v2,
  758.                       tes, real -- number of tesselations around the
  759.                       surface of the dome,
  760.                       
  761.    
  762.    
  763.    4.10.1.8 Nose -- A conical figure, with one end offset from the other
  764.    like an airplane nose. If neither end of the nose has radius zero, the
  765.    two end planes are parallel. There are two ways of describing a nose:
  766.    
  767.                 Base anchored at the origin in the XY plane,
  768.                 
  769.                       r_bottom, real -- radius of the base,
  770.                       r_top, real -- radius of the other end,
  771.                       h, real -- distance between the top and the base,
  772.                       tes, integer -- number of tesselations around the
  773.                       surface of the nose.
  774.                       
  775.                 User specifiable axis and end plane angle:
  776.                 
  777.                       v1, vertex3 -- location of the other, non-base end
  778.                       of the nose,
  779.                       v2, vertex3 -- location of the base end of the
  780.                       nose,
  781.                       zdir, vector3 -- is the normal to the two end
  782.                       planes,
  783.                       r_bottom, real -- radius of the base,
  784.                       r_top, real -- radius of the other end,
  785.                       tes, integer -- number of tesselations around the
  786.                       surface of the nose.
  787.                       
  788.    
  789.    
  790.    4.10.1.9 Pyramid -- The classical pyramid with a rectangular base.
  791.    There are three ways to describe a pyramid.
  792.    
  793.                 Anchored at the origin with the base in the XY plane, If
  794.                 v2 is not centered over the base the pyramid will have an
  795.                 edge on top or have a flat top.
  796.                 
  797.                       v1, vertex3 -- defines a point in the XY plane
  798.                       diagonally opposite the origin,
  799.                       v2, vertex3 -- the narrow end of the pyramid.
  800.                       
  801.                 User specifiable narrow end,
  802.                 
  803.                       v1, vertex3 -- defines a point in the XY plane
  804.                       diagonally opposite the
  805.                       anchor point v3,
  806.                       v2, vertex3 -- the narrow end of the pyramid.
  807.                       v3, vertex3 -- an anchor point instead of the
  808.                       origin.
  809.                       
  810.                 User specifiable narrow end and orientation,
  811.                 
  812.                       v1, vertex3 -- defines a point in the base plane
  813.                       diagonally opposite the anchor point v3
  814.                       v2, vertex3 -- the narrow end of the pyramid.
  815.                       v3, vertex3 -- an anchor point instead of the
  816.                       origin.
  817.                       xdir, vector3 -- with zdir, defines the base plane,
  818.                       
  819.                       zdir, vector3 -- with xdir, defines the base plane
  820.                       
  821.    
  822.    
  823.    4.10.1.10 Reducer -- A hollow cone, cylinder or nose, with center
  824.    shaft of varying size. There are two ways to describe a reducer:
  825.    
  826.                 Anchored at the origin in the XY plane and extruded along
  827.                 the increasing Z axis,
  828.                 
  829.                       v2, vertex3 -- defining the other end of the
  830.                       reducer,
  831.                       rad1, real -- defines the outer radius of the
  832.                       anchored end,
  833.                       rad1i, real -- defines the inner radius of the
  834.                       anchored end,
  835.                       rad2, real -- defines the outer radius of the other
  836.                       end,
  837.                       rad2i, real -- defnes the inner radius of the other
  838.                       end,
  839.                       tes, integer -- defines the number of tesselations
  840.                       around the reducer.
  841.                       
  842.                 User specifiable anchor point,
  843.                 
  844.                       v1, vertex3 -- defines the anchor point of the
  845.                       reducer,
  846.                       v2, vertex3 -- defining the other end of the
  847.                       reducer,
  848.                       rad1, real -- defines the outer radius of the
  849.                       anchored end,
  850.                       rad1i, real -- defines the inner radius of the
  851.                       anchored end,
  852.                       rad2, real -- defines the outer radius of the other
  853.                       end,
  854.                       rad2i, real -- defnes the inner radius of the other
  855.                       end,
  856.                       tes, integer -- defines the number of tesselations
  857.                       around the reducer,
  858.                       zdir, vector3 -- defines the plane normal in which
  859.                       the ends v1 and v2 lie.
  860.                       
  861.    
  862.    
  863.    4.10.1.11 Sphere -- The number of longitude and latitude tesselations
  864.    are equal.
  865.    
  866.                 User-specifiable center; axis parallel to the Z axis,
  867.                 
  868.                       v1, vertex3 -- location of center of the sphere,
  869.                       rad, real -- radius of the sphere,
  870.                       tes, integer -- tesselations about the axis.
  871.                       
  872.                 User-specifiable center and axis,
  873.                 
  874.                       v1, vertex3 -- location of center of the sphere,
  875.                       rad, real -- radius of the sphere,
  876.                       tes, integer -- tesselations about the axis,
  877.                       zdir, vector3 -- orientation of the axis.
  878.                       
  879.    
  880.    
  881.    4.10.1.12 Torus -- Orientation is through the hole. The major axis is
  882.    centered on the hole. The minor axis is a circle centered in the ring.
  883.    
  884.                 Centered at the origin, oriented along the Z axis,
  885.                 
  886.                       major, real -- radius of the torus defined as the
  887.                       distance from the center to the minor axis.
  888.                       minor, real -- radius of the ring from the minor
  889.                       axis,
  890.                       tes1, integer -- number of tesselations around the
  891.                       major axis,
  892.                       tes2, integer -- number of tesselations around the
  893.                       minor axis.
  894.                       
  895.                 User specifiable center and orientation,
  896.                 
  897.                       major, real -- radius of the torus defined as the
  898.                       distance from the center to the minor axis.
  899.                       minor, real -- radius of the ring from the minor
  900.                       axis,
  901.                       tes1, integer -- number of tesselations around the
  902.                       major axis,
  903.                       tes2, integer -- number of tesselations around the
  904.                       minor axis,
  905.                       v1, vertex3 -- center of the torus,
  906.                       zdir, vector3 -- orientation of the torus,
  907.                       perpendicular to the major radius.
  908.                       
  909.    
  910.    
  911.    4.10.1.13 Solid of Extrusion -- A closed polygon extruded some
  912.    distance along a vector, where the polygon is defined by a sequence of
  913.    coplanar vertices in a value queue. There are two ways to describe a
  914.    solid of extrusion.
  915.    
  916.                 Extrusion perpendicular to the plane of the polygon along
  917.                 the normal vector. The normal vector is defined by the
  918.                 right-hand rule.
  919.                 
  920.                       p, sequence of vertex3's in the value queue --
  921.                       defines the polygon and (by implication) its
  922.                       normal,
  923.                       h, real -- distance the polygon is swept along the
  924.                       extrusion vector.
  925.                       Extrusion along a user-specified vector,
  926.                       p, sequence of vertex3's in the value queue --
  927.                       defines the polygon and (by implication) its
  928.                       normal,
  929.                       h, real -- distance the polygon is swept along the
  930.                       extrusion vector,
  931.                       v, vector3 -- direction of the sweep.
  932.                       
  933.    
  934.    
  935.    4.10.1.14 Solid of Revolution -- a radially symmetric figure defined
  936.    by revolution of a polygon about an axis.
  937.    
  938.         
  939.                 p, sequence of vertex3's in the value queue -- defines
  940.                 the polygon and its normal,
  941.                 angle, real -- angle of revolution of p around the axis
  942.                 defined by pnt and vec,
  943.                 
  944.                       pnt, vertex3 -- anchor for the axis of revolution,
  945.                       vec, vector3 -- direction of axis of revolution,
  946.                       tes, integer -- the number of tesselations within
  947.                       the angle.
  948.                       
  949.    
  950.    
  951.    4.10.1.16 Solid Boolean -- A solid figure defined from a Boolean
  952.    operation on two other solid figures.
  953.    
  954.         
  955.                 a, reference to geometry -- One of the objects to perform
  956.                 the Boolean operation on. Must be a solid.
  957.                 b, reference to geometry -- One of the objects to perform
  958.                 the Boolean operation on. Must be a solid.
  959.                 op, string -- a Boolean operation. Must be one of UNION
  960.                 (the union of a and b), SUBTRACT (the subtraction of b
  961.                 from a), or INTERSECT (the intersection of a and b).
  962.                 
  963.    
  964.    
  965.    4.10.1.17 Solid Creation -- Create a solid figure from a piece of
  966.    geometry that encloses a single finite volume. Useful for creating
  967.    solids that can partake in Boolean operations.
  968.    
  969.         
  970.                 rb, reference to geometry -- a closed figure.
  971.                 
  972.    
  973.    
  974.    4.10.2. Section LIGHTS -- Lights can be of four types: point, spot,
  975.    directed or ambient. These types have overlapping sets of parameters
  976.    detailing position, aim, color, distribution, and so forth. For each
  977.    light parameter specified in this document, the parameter name and
  978.    type will be followed with one or more of PSDA, (for Point, Spot,
  979.    Directed, Ambient) indicating which light type it is appropriate for.
  980.    Not all displays can handle all these of parameters.
  981.    
  982.               light_type, string, PSDA
  983.                       one of POINT, SPOT, DIRECTED or AMBIENT.
  984.                       
  985.               position, vertex3, PSDA
  986.                       location of the light.
  987.                       
  988.               aim, vector3, DS
  989.                       aim of the light.
  990.                       
  991.               magnitude, real, PSDA
  992.                       magnitude of the light. Allowable range is 0 to 1.
  993.                       
  994.               cone_angle, real, S
  995.                       cone angle of a SPOT light, in degrees. Allowable
  996.                       range is 0 to 90.
  997.                       
  998.               cone_delta, real, S
  999.                       cone delta of a SPOT light, in degrees. Allowable
  1000.                       range is 0 to 90.
  1001.                       
  1002.               beam_distribution, real, S
  1003.                       beam distribution for a SPOT light. Allowable range
  1004.                       is 0 to 1. This specifies the change in intensity
  1005.                       of the light as the distance from the center of the
  1006.                       axis of the cone increases. A value of 0 specifies
  1007.                       that the intensity does not change.
  1008.                       
  1009.               constant_attenuation, linear_attenuation,
  1010.                       squared_attenuation, real, PS
  1011.                       The total attenuation for the light source at a
  1012.                       distance D is given by the formula: attenuation =
  1013.                       1.0 / constant_attenuation + ( linear_attenuation *
  1014.                       D) + ( squared_attenuation * D * D).
  1015.                       
  1016.               rgb, tuple of 3 reals, PSDA
  1017.                       the color of the light as an RGB triple, where each
  1018.                       element has a range between 0 and 1. The actual
  1019.                       intensity of a color component is the product of
  1020.                       its value in the RGB triple and the overall
  1021.                       magnitude.
  1022.                       
  1023.    
  1024.    
  1025.    4.10.3. Section VIEWERS -- A viewer defines a point of view in space,
  1026.    and optionally a means to move that point of view. All viewers have:
  1027.    
  1028.         
  1029.                 from, vertex3 - location of the viewer in global
  1030.                 coordinates.
  1031.                 to, vertex3 - point the viewer is looking toward in
  1032.                 global coordinates.
  1033.                 up, vector3 - a vector in the plane defined by from and
  1034.                 the vector to - from.
  1035.                 display, reference - a reference to a display driver from
  1036.                 a DISPLAYS section.
  1037.                 perspective, tuple - (unless set by display) a tuple of
  1038.                 four reals (fovy aspect hither yon) defining a view
  1039.                 frustrum, where:
  1040.                 fovy, real - field of view, in degrees top to bottom
  1041.                 direction,
  1042.                 aspect, real - aspect ratio of width to height,
  1043.                 hither, real - near clipping plane,
  1044.                 yon, real - far clipping plane.
  1045.                 
  1046.    Some viewers have:
  1047.    
  1048.         
  1049.                 sensor, reference - a reference to a sensor driver from a
  1050.                 SENSORS section, that moves the point of view of the
  1051.                 viewer.
  1052.                 
  1053.    
  1054.    
  1055.    4.10.4. Section SIMS -- A Sim is an object to be simulated in a
  1056.    cyberspace simulation. It has properties such as geometry, mass and
  1057.    dynamical properties, location, orientation and behavior. This
  1058.    document does not detail how behavior is to be specified, but it is
  1059.    assumed that different kinds of behavior will have their own sections
  1060.    yet to be defined. A sim may also have its own internal behavior as
  1061.    part of its implementation.
  1062.    
  1063.    Sims do not use geometrical components directly, but create an
  1064.    instance of the component for their own use. In this way,
  1065.    geometrical descriptions can be reused by multiple sims in different
  1066.    locations.
  1067.    
  1068.    All sims can be described by the following variables:
  1069.    
  1070.         
  1071.                 geometry, reference to geometry -- the geometry used to
  1072.                 make a an component instance,
  1073.                 material, reference to material -- the material of the
  1074.                 object,
  1075.                 location, vertex3 -- location of the component instance
  1076.                 of the geometry reference,
  1077.                 rotation, rotation -- rotation of the component instance
  1078.                 of the geometry reference.
  1079.                 
  1080.    Sims used to simulate physical objects in Newtonian dynamical systems
  1081.    have additional specifiabale properties. Their mass properties are:
  1082.    
  1083.         
  1084.                 volume, real -- the volume in the units of the geometry,
  1085.                 density, real -- mass per unit volume,
  1086.                 mass, real -- the product of volume and density,
  1087.                 moments, tuple of 3 reals -- moments of inertia relative
  1088.                 to the world coordinate system.
  1089.                 products, tuple of 3 reals -- products of inertia
  1090.                 relative to the world coordinate system.
  1091.                 centroid, vertex3 -- centroid used for calculation of
  1092.                 moments and products of inertia. Does not change as the
  1093.                 geometry is moved.
  1094.                 
  1095.    
  1096.    
  1097.    Mass is not normally specified unless volume and/or density are
  1098.    unknown. For closed geometrical figures volume and other properties
  1099.    can often be calculated. Principal moments and principal axes are
  1100.    calculated by the physical sim object from these properties as needed
  1101.    by physical simulators.
  1102.    
  1103.    
  1104.    
  1105.    Several dynamical properties can also be described:
  1106.    
  1107.         
  1108.                 vel, vector3 -- velocity vector of the object,
  1109.                 avel, vector3 -- angular velocity vector of the object,
  1110.                 cog, vertex3 -- center of gravity. This sets the absolute
  1111.                 location of the center of gravity in space.
  1112.                 
  1113.    
  1114.    
  1115.    4.10.5. Section SPACES -- A space is an organizing and scheduling
  1116.    container. Each entry in a space description contains a tuple of
  1117.    references to objects from a particular section that are to be
  1118.    included in and scheduled by the space. The names of these description
  1119.    variables include: lights, materials, geometry, viewers and sims. As
  1120.    more section types are used, spaces will be come more sophisticated to
  1121.    make use of them.
  1122.    
  1123.    5. Contact Information
  1124.    
  1125.    Requests for further information and comments about this proposal
  1126.    should be directed to Carl Tollander, email carlt@autodesk.com.
  1127.